<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>侦探小游戏 - 神秘的校园失窃案</title>
    <link rel="stylesheet" href="侦探小游戏.css">
</head>
<body>
    <div class="container">
        <h1>侦探小游戏 - 神秘的校园失窃案</h1>
        
        <div id="game-container">
            <div class="scene" id="scene">
                欢迎来到校园侦探游戏！今天早上，学校的珍贵奖杯被盗了。作为校园侦探社的成员，你需要找出真相。
            </div>
            
            <div class="characters" id="characters">
                <!-- 角色会动态显示在这里 -->
            </div>
            
            <div class="dialogue-box" id="dialogue">
                <p id="dialogue-text">点击角色开始对话或调查现场。</p>
            </div>
            
            <div class="choices" id="choices">
                <!-- 选择会动态显示在这里 -->
            </div>
            
            <div class="inventory">
                <h3>收集的证据：</h3>
                <ul id="evidence-list" class="evidence-list">
                    <!-- 证据会动态添加到这里 -->
                </ul>
            </div>
        </div>
    </div>

    <script>
        // 游戏状态
        const gameState = {
            currentScene: 'start',
            evidence: [],
            dialogueHistory: [],
            suspectsInterviewed: []
        };

        // 游戏场景
        const scenes = {
            start: {
                description: '你站在学校体育馆门口，这里是奖杯被盗的现场。体育馆管理员正在焦急地等待你的调查。',
                characters: ['管理员', '学生A', '学生B'],
                evidence: ['监控录像线索', '掉落的学生证']
            },
            classroom: {
                description: '你来到了案发当晚有人看到可疑人物的教室。教室里空无一人，但似乎有些不寻常的地方。',
                characters: ['老师', '清洁工'],
                evidence: ['粉笔灰痕迹', '窗户被打开']
            },
            library: {
                description: '图书馆是学校里另一个可能的线索地点。图书管理员可能看到了什么。',
                characters: ['图书管理员', '学生C'],
                evidence: ['借阅记录', '遗落的笔记本']
            },
            dormitory: {
                description: '学生宿舍区，你可以在这里找到更多学生了解情况。',
                characters: ['学生D', '宿管阿姨'],
                evidence: ['可疑的包裹', '运动鞋印']
            },
            conclusion: {
                description: '你已经收集了足够的证据，现在需要指出真正的窃贼。',
                characters: [],
                evidence: []
            }
        };

        // 角色对话
        const characterDialogues = {
            '管理员': {
                initial: '侦探先生，您可算来了！今天早上我发现奖杯不见了，这可是我们学校的荣誉啊！',
                questions: {
                    '昨晚发生了什么？': '我昨晚9点锁门离开的，一切都很正常。今早7点来开门，就发现奖杯不见了。',
                    '有监控录像吗？': '有的，但是监控只覆盖了部分区域。我已经把录像交给保安室了。',
                    '谁有体育馆的钥匙？': '只有我和校长有钥匙。不过窗户是开着的，可能有人从那里进来。'
                }
            },
            '学生A': {
                initial: '我昨晚路过体育馆，看到里面好像有灯光。但我没在意就走了。',
                questions: {
                    '你几点路过的？': '大概10点左右吧，我从图书馆回来。',
                    '你看到有人进出吗？': '没有看到人，但是里面确实有光。',
                    '你知道谁可能想要偷奖杯吗？': '嗯...最近有个体育比赛要举行，我们的对手学校可能会想要破坏我们的士气。'
                }
            },
            '学生B': {
                initial: '奖杯被盗了？这太可怕了！我昨晚在宿舍，什么都不知道。',
                questions: {
                    '你整晚都在宿舍吗？': '是的，我在复习功课。室友可以证明。',
                    '你对奖杯了解多少？': '那是我们学校去年赢得的市冠军奖杯，非常重要。',
                    '你觉得谁会做这种事？': '我不知道...也许是嫉妒我们学校的人吧。'
                }
            },
            '老师': {
                initial: '作为老师，我对这件事感到非常遗憾。奖杯对学校意义重大。',
                questions: {
                    '您昨晚在学校吗？': '是的，我在办公室批改作业，大概11点离开的。',
                    '您看到什么可疑的人吗？': '离开时看到一个学生模样的人匆忙跑过走廊，但没看清是谁。',
                    '您有什么线索吗？': '我注意到教室的窗户被打开了，平时这个时候应该是关着的。'
                }
            },
            '清洁工': {
                initial: '我早上来打扫的时候就听说了这件事。真是太可惜了。',
                questions: {
                    '您什么时候开始工作的？': '我每天早上6点来，今天一来就听说奖杯不见了。',
                    '您打扫的时候发现什么异常吗？': '在走廊上发现了一些粉笔灰，还有一串钥匙。',
                    '钥匙看起来是谁的？': '像是学生储物柜的钥匙，上面有个小挂件。'
                }
            },
            '图书管理员': {
                initial: '图书馆昨晚9点关门，我是最后一个离开的。',
                questions: {
                    '有人昨晚很晚还在图书馆吗？': '有几个学生在复习，大概10点左右离开的。',
                    '您有借阅记录吗？': '有的，如果需要的话我可以提供。有个学生借了一本关于开锁技巧的书。',
                    '您记得那个学生的样子吗？': '是个男生，戴着眼镜，穿蓝色外套。'
                }
            },
            '学生C': {
                initial: '我昨晚在图书馆复习，直到闭馆才离开。',
                questions: {
                    '你离开图书馆后去了哪里？': '直接回宿舍了，路上经过体育馆，但没进去。',
                    '你看到什么异常吗？': '没什么特别的，就是体育馆的灯好像还亮着。',
                    '你知道谁借了开锁的书吗？': '这个...其实是我借的，我对锁具很感兴趣。'
                }
            },
            '学生D': {
                initial: '奖杯被盗了？这太让人震惊了！',
                questions: {
                    '你昨晚在做什么？': '我在宿舍玩游戏，室友可以证明。',
                    '你听说过什么关于奖杯的传闻吗？': '听说有人打赌说能偷走奖杯，但我以为只是玩笑。',
                    '你认识学生C吗？': '认识，他是我的朋友。他最近确实在研究锁具。'
                }
            },
            '宿管阿姨': {
                initial: '我昨晚值班到12点，看到很多学生进出宿舍。',
                questions: {
                    '有学生很晚才回来吗？': '有个学生大概11点半才回来，看起来很慌张。',
                    '您记得是谁吗？': '是个戴眼镜的男生，经常来借钥匙。',
                    '您有登记记录吗？': '有的，我可以查一下...是学生C，他11点35分回到宿舍。'
                }
            }
        };

        // 证据信息
        const evidenceInfo = {
            '监控录像线索': '录像显示10点15分有个人影进入体育馆，但看不清面孔。',
            '掉落的学生证': '学生证是学生C的，但他说昨天下午就丢失了。',
            '粉笔灰痕迹': '从教室到体育馆的路上有明显的粉笔灰痕迹。',
            '窗户被打开': '体育馆的后窗被打开，窗台上有脚印。',
            '借阅记录': '学生C确实借了一本关于开锁技巧的书。',
            '遗落的笔记本': '笔记本里有体育馆的结构图，标注了监控盲区。',
            '可疑的包裹': '在学生C的储物柜里发现了一个包裹，里面是奖杯的复制品。',
            '运动鞋印': '鞋印与学生C的鞋子吻合。'
        };

        // 初始化游戏
        function initGame() {
            updateScene();
        }

        // 更新场景
        function updateScene() {
            const scene = scenes[gameState.currentScene];
            document.getElementById('scene').textContent = scene.description;
            
            // 更新角色列表
            const charactersContainer = document.getElementById('characters');
            charactersContainer.innerHTML = '';
            scene.characters.forEach(character => {
                const charElement = document.createElement('div');
                charElement.className = 'character';
                charElement.textContent = character;
                charElement.onclick = () => talkToCharacter(character);
                charactersContainer.appendChild(charElement);
            });
            
            // 更新证据列表
            const dialogueBox = document.getElementById('dialogue');
            const dialogueText = document.getElementById('dialogue-text');
            dialogueText.textContent = '点击角色开始对话或调查现场。';
            
            // 更新选择列表
            const choicesContainer = document.getElementById('choices');
            choicesContainer.innerHTML = '';
            
            // 添加场景转换选项
            if (gameState.currentScene !== 'conclusion') {
                const locations = ['start', 'classroom', 'library', 'dormitory'];
                locations.forEach(location => {
                    if (location !== gameState.currentScene) {
                        const choiceBtn = document.createElement('button');
                        choiceBtn.className = 'choice-btn';
                        choiceBtn.textContent = `前往${getLocationName(location)}`;
                        choiceBtn.onclick = () => changeScene(location);
                        choicesContainer.appendChild(choiceBtn);
                    }
                });
            }
            
            // 添加收集证据的选项
            scene.evidence.forEach(item => {
                if (!gameState.evidence.includes(item)) {
                    const choiceBtn = document.createElement('button');
                    choiceBtn.className = 'choice-btn';
                    choiceBtn.textContent = `调查并收集：${item}`;
                    choiceBtn.onclick = () => collectEvidence(item);
                    choicesContainer.appendChild(choiceBtn);
                }
            });
            
            // 当收集了足够证据时，显示结案选项
            if (gameState.evidence.length >= 5 && gameState.suspectsInterviewed.length >= 4) {
                const choiceBtn = document.createElement('button');
                choiceBtn.className = 'choice-btn';
                choiceBtn.textContent = '前往结案，指出窃贼';
                choiceBtn.onclick = () => changeScene('conclusion');
                choicesContainer.appendChild(choiceBtn);
            }
            
            // 如果在结案场景，显示嫌疑人选择
            if (gameState.currentScene === 'conclusion') {
                showConclusionChoices();
            }
            
            // 更新证据清单
            updateEvidenceList();
        }

        // 获取地点名称
        function getLocationName(location) {
            const names = {
                start: '体育馆',
                classroom: '教室',
                library: '图书馆',
                dormitory: '宿舍区',
                conclusion: '结案'
            };
            return names[location] || location;
        }

        // 与角色对话
        function talkToCharacter(character) {
            if (!characterDialogues[character]) return;
            
            const dialogue = characterDialogues[character];
            document.getElementById('dialogue-text').textContent = dialogue.initial;
            
            // 添加到已访谈列表
            if (!gameState.suspectsInterviewed.includes(character)) {
                gameState.suspectsInterviewed.push(character);
            }
            
            // 显示问题选项
            const choicesContainer = document.getElementById('choices');
            choicesContainer.innerHTML = '';
            
            for (const [question, answer] of Object.entries(dialogue.questions)) {
                const choiceBtn = document.createElement('button');
                choiceBtn.className = 'choice-btn';
                choiceBtn.textContent = question;
                choiceBtn.onclick = () => {
                    document.getElementById('dialogue-text').textContent = answer;
                    // 记录对话历史
                    gameState.dialogueHistory.push({ character, question, answer });
                };
                choicesContainer.appendChild(choiceBtn);
            }
            
            // 添加返回选项
            const backBtn = document.createElement('button');
            backBtn.className = 'choice-btn';
            backBtn.textContent = '结束对话';
            backBtn.onclick = updateScene;
            choicesContainer.appendChild(backBtn);
        }

        // 收集证据
        function collectEvidence(item) {
            if (!gameState.evidence.includes(item)) {
                gameState.evidence.push(item);
                document.getElementById('dialogue-text').textContent = `你发现并收集了证据：${item}\n${evidenceInfo[item]}`;
                updateEvidenceList();
                
                // 更新选择列表，移除已收集的证据
                const choicesContainer = document.getElementById('choices');
                const buttons = choicesContainer.getElementsByTagName('button');
                for (let i = 0; i < buttons.length; i++) {
                    if (buttons[i].textContent.includes(item)) {
                        choicesContainer.removeChild(buttons[i]);
                        break;
                    }
                }
            }
        }

        // 更新证据列表
        function updateEvidenceList() {
            const evidenceList = document.getElementById('evidence-list');
            evidenceList.innerHTML = '';
            
            if (gameState.evidence.length === 0) {
                const emptyItem = document.createElement('li');
                emptyItem.textContent = '暂无证据';
                evidenceList.appendChild(emptyItem);
            } else {
                gameState.evidence.forEach(item => {
                    const evidenceItem = document.createElement('li');
                    evidenceItem.textContent = item;
                    evidenceList.appendChild(evidenceItem);
                });
            }
        }

        // 切换场景
        function changeScene(sceneName) {
            gameState.currentScene = sceneName;
            updateScene();
        }

        // 显示结案选项
        function showConclusionChoices() {
            const choicesContainer = document.getElementById('choices');
            choicesContainer.innerHTML = '';
            
            const suspects = ['学生A', '学生B', '学生C', '学生D', '管理员', '老师'];
            suspects.forEach(suspect => {
                const choiceBtn = document.createElement('button');
                choiceBtn.className = 'choice-btn';
                choiceBtn.textContent = `指控：${suspect}`;
                choiceBtn.onclick = () => checkAccusation(suspect);
                choicesContainer.appendChild(choiceBtn);
            });
        }

        // 检查指控是否正确
        function checkAccusation(suspect) {
            const gameContainer = document.getElementById('game-container');
            gameContainer.innerHTML = '';
            
            const gameOverDiv = document.createElement('div');
            gameOverDiv.className = 'game-over';
            
            if (suspect === '学生C') {
                gameOverDiv.innerHTML = `
                    <h2>恭喜你！</h2>
                    <p>你成功找出了真正的窃贼！学生C因为对锁具的兴趣和虚荣心，想要证明自己的能力而偷走了奖杯。</p>
                    <p>他计划用复制品替换真品，但被你的调查识破了。</p>
                    <p>收集的证据汇总：</p>
                    <ul style="text-align: left; max-width: 400px; margin: 0 auto;">
                        ${gameState.evidence.map(e => `<li>${e}</li>`).join('')}
                    </ul>
                    <button class="restart-btn" onclick="window.location.reload()">重新开始</button>
                `;
            } else {
                gameOverDiv.innerHTML = `
                    <h2>很遗憾，指控错误！</h2>
                    <p>真正的窃贼是学生C。</p>
                    <p>再试一次，仔细分析证据吧！</p>
                    <button class="restart-btn" onclick="window.location.reload()">重新开始</button>
                `;
            }
            
            gameContainer.appendChild(gameOverDiv);
        }

        // 开始游戏
        window.onload = initGame;
    </script>
</body>
</html>